﻿#pragma once
#define LK_WINDOWS_WINDOWSEXCEPTION_
namespace LK
{
	namespace Windows
	{
		struct PWindowsException :PException
		{
			PEXCEPTION(WindowsException, L"WindowsAPI异常")
#ifdef _CLR //托管支持
			/**
			@brief 从托管异常初始化*/
			PWindowsException(System::Exception^);
			/**
			@brief 转换到托管异常*/
			operator System::Exception ^ ()const;
#endif
			/**
			@brief 从错误码进行构造，这将自动查找错误描述*/
			PWindowsException(HRESULT code);
			/**
			@brief 获取错误码*/
			HRESULT GetErrorCode()const;
			/**
			@brief 根据错误码查找错误描述*/
			static PString GetDescriptionByCode(HRESULT code);
		};
		struct WindowsException:Exception
		{
			BEXCEPTION(WindowsException, Exception, L"WindowsAPI异常")
			/**
			@bief 错误码*/
			HRESULT errorCode;
			/**
			@brief 从错误码进行构造，这将自动查找错误描述*/
			WindowsException(HRESULT code);
#ifdef _CLR //托管支持
			/**
			@brief 从托管异常初始化*/
			WindowsException(System::Exception^ e);
			/**
			@brief 转换到托管异常*/
			operator System::Exception ^ ()const;
#endif
		};
	}
}
